1 Introduction

Every year, the New York State Forest Rangers have to rescue people who use the outdoors for recreation. Some get injured and need evacuation, some get lost and need search and rescue, but all put a burden on our park services resources. Any efforts to educate people on how to be safer and more responsible in nature will go a long way towards helping alleviate this burden but the Department of Environmental Conservation does not have the resources to market to everyone. In our analysis, we will try to identify groups that are at a greater risk of needing evacuation so we can make a recommendation on where best to allocate resources on awareness. We decided to focus on the Adirondack Park because of the region’s high traffic and ability to attract inexperienced visitors. &&&&The variables of interest are the amount of rangers involved, amount of people being rescued, age and gender of rescued, and the type of activity that caused the accident. We will be analyzing the rescues happening in the Adirondack Park to try to find groups of people who are at a greater risk of needing rescue and would therefore benefit more from targeted awareness campaigns.

2 Background

This is observational data originally found on Data World (https://data.world/) from the NYSDEC on forest ranger incident reports. In order to help understand the data it would be helpful for the reader to have previous knowledge about recreational activities in New York State forests and the risks involved with those activities.

3 Methods and Results

To help us visualize the location found data we can look at all the incidents plotted on a map of New York State as shown in section 3.1. From visual inspection, we can see the highest density of rescues occur in the Adirondacks. We can verify this by using the table function to summarize the results.


Outside ADK  Inside ADK 
       1156        2078 

3.1 Location Found of all Incidents

tmap mode set to interactive viewing

One of the variables we focused the most on was the age of the rescued. Section 3.2 displays the location found data again by subject age except this time just for incidents that started in the Adirondack park. There are a few outliers where people were found outside the park. These are likely due to the person being reported missing but then being found at home.

3.2 Location Found in Adirondacks Grouped by Age

tmap mode set to interactive viewing

The data frame can be overwhelming to look at. It is easier to digest when summarized with the “table” function. We can use this function to better visualize the variables of interest.

Some initial observations are that more men need assistance than women, there were more searches than rescues, recoveries, or fugitive searches combined, and the most common activity to need assistance was hiking, followed not so closely by boating.


        F    M 
   6  827 1245 

Fugitive Search        Recovery          Rescue          Search 
              2              60             902            1114 

            Aircraft               Biking              Boating 
                   8                   12                  133 
             Camping             Chainsaw    Climbing:Rock/Ice 
                  60                    3                   35 
            Criminal           Despondent              Fishing 
                   4                   20                   18 
        Flood Victim               Hiking     Horseback riding 
                   1                 1512                    2 
             Hunting        Motor vehicle Off road vehicle/ATV 
                  74                    6                   16 
             Runaway               Skiing           Snowmobile 
                  17                   23                   63 
            Stranded             Swimming              Walking 
                   3                   26                   40 
          Whitewater 
                   2 

There seems to be a correlation between the subject’s age and what type of response is typically needed. It can be concluded that as people get older, they may become more familiar with the land, or simply be more careful with their activities. Search and Rescue responses are the only type that occur for people 30 and under, proving that the younger people should probably have more training on certain skills before traveling into the mountains alone. Although, the mean is around 35 to 40 years old, meaning that mostly people over 30 are more common in general in the area, and therefore needing the help just as much. Overall all people traversing into the mountains should have better safety awareness before going out alone, in case any problems occur. Another important point to make about this data is the noticeable correlation between older people and recovery. As we all know, as we age our bodies are not as capable as they used to be, meaning they are more likely to be injured, causing a need to be rescued. One way to decrease the need for rescues could be extra training about safety precautions and give fair warnings about certain activities. For example if a hike has one area that gets slippery before the rest, put up more signs or make sure it is mentioned before anyone even begins the excursion.

Warning: Removed 70 rows containing non-finite values (stat_boxplot).

Mean ages
Recovery=  50.8
Rescue=  39.83433
Search=  35.26649
mean(y$incident_time_elapsed)
Error in mean(y$incident_time_elapsed) : object 'y' not found

Perform at least one relevant hypothesis test.

Two hypothesis tests were performed

The first hypothesis test was a two-tailed test to find the difference between between amount of males and females.

The second hypothesis test performed was a single-tailed hypothesis to see if the ages between rescued males and females differ.
The null hypothesis is mu_f - mu_m = 0 The alternative hypothesis is mu_f - mu_m < 0 The t-test is performed to find the difference between the two samples. After the t-test is run, the value is -3.176, meaning we reject the null hypothesis because the difference between males and females is not 0.

# Does the mean case time differ between search and rescue?
t.test(search$incident_time_elapsed,rescue$incident_time_elapsed,alternative = "two.sided",conf.level = .98)

# Does the mean case time differ between recovery and search?
t.test(recovery$incident_time_elapsed,search$incident_time_elapsed,alternative = "two.sided",conf.level = .98)
incident_model <- lm(incident_time_elapsed~number_of_rangers_involved, data = y)
incident_model
# intercept 1206.5
# slope 624.2 
# this means predicted time = 624.2 * rangers involved

#y %>% ggplot(aes(x = number_of_rangers_involved, y = incident_time_elapsed)) +
#  geom_point() +
#  geom_abline(intercept = 3.257e+00, slope = 8.195e-06 )
#incident_model$residuals
sum(incident_model$residuals^2)
summary(incident_model)

# Because p is less than alpha, we reject the null hypothesis. We have reason to believe that there is a linear relationship between incident time elapsed and number of rangers involved

Check the various assumptions of for statistical tests.


# predict the time to close a case with 3 rangers
predict(incident_model, newdata = data.frame(number_of_rangers_involved = 3))

# correlation between time elapsed and number of rangers for all types of incidents
y %>%
  ggplot(aes(x = incident_time_elapsed, y = number_of_rangers_involved, color = response_type)) +
  geom_point(size = 0.1) +
  facet_wrap(vars(response_type))

# looking at correlation for each response type
# there is a high correlation between time elapsed and number of rangers involved for fugitive search
# the other ones dont show a high correlation but this is kinda expected because there are lots of outliers
y %>%
  group_by(response_type) %>%
  summarize(r = cor(incident_time_elapsed, number_of_rangers_involved, use = "complete.obs"))


# incident model qq plot
plot(incident_model)

For the linear regression analysis, interpret coefficients and/or make relevant predictions and summarize their meaning.


raw_adk_data %>%
  group_by(response_type) %>%
  summarize(r = cor(x = subject_age, y = number_of_rangers_involved, use = "complete.obs"))
cor(raw_adk_data$subject_age,raw_adk_data$number_of_rangers_involved, use = "complete.obs")

4 Conclusions

References

Data.world https://data.world/data-ny-gov/u6hu-h7p5

LS0tDQp0aXRsZTogIlNlYXJjaCBhbmQgUmVzY3VlcyBpbiB0aGUgQWRpcm9uZGFja3MiDQphdXRob3I6ICJLcmlzdGluYSBGcmFua2xpbiwgUm9zaWUgRGVsd2ljaGUsIENvbm5vciBIYXRoYXdheSwgSmFja2llIEJ1ZGthIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQotLS0NCg0KIyBJbnRyb2R1Y3Rpb24NCg0KRXZlcnkgeWVhciwgdGhlIE5ldyBZb3JrIFN0YXRlIEZvcmVzdCBSYW5nZXJzIGhhdmUgdG8gcmVzY3VlIHBlb3BsZSB3aG8gdXNlIHRoZSBvdXRkb29ycyBmb3IgcmVjcmVhdGlvbi4gU29tZSBnZXQgaW5qdXJlZCBhbmQgbmVlZCBldmFjdWF0aW9uLCBzb21lIGdldCBsb3N0IGFuZCBuZWVkIHNlYXJjaCBhbmQgcmVzY3VlLCBidXQgYWxsIHB1dCBhIGJ1cmRlbiBvbiBvdXIgcGFyayBzZXJ2aWNlcyByZXNvdXJjZXMuIEFueSBlZmZvcnRzIHRvIGVkdWNhdGUgcGVvcGxlIG9uIGhvdyB0byBiZSBzYWZlciBhbmQgbW9yZSByZXNwb25zaWJsZSBpbiBuYXR1cmUgd2lsbCBnbyBhIGxvbmcgd2F5IHRvd2FyZHMgaGVscGluZyBhbGxldmlhdGUgdGhpcyBidXJkZW4gYnV0IHRoZSBEZXBhcnRtZW50IG9mIEVudmlyb25tZW50YWwgQ29uc2VydmF0aW9uIGRvZXMgbm90IGhhdmUgdGhlIHJlc291cmNlcyB0byBtYXJrZXQgdG8gZXZlcnlvbmUuIEluIG91ciBhbmFseXNpcywgd2Ugd2lsbCB0cnkgdG8gaWRlbnRpZnkgZ3JvdXBzIHRoYXQgYXJlIGF0IGEgZ3JlYXRlciByaXNrIG9mIG5lZWRpbmcgZXZhY3VhdGlvbiBzbyB3ZSBjYW4gbWFrZSBhIHJlY29tbWVuZGF0aW9uIG9uIHdoZXJlIGJlc3QgdG8gYWxsb2NhdGUgcmVzb3VyY2VzIG9uIGF3YXJlbmVzcy4gV2UgZGVjaWRlZCB0byBmb2N1cyBvbiB0aGUgQWRpcm9uZGFjayBQYXJrIGJlY2F1c2Ugb2YgdGhlIHJlZ2lvbidzIGhpZ2ggdHJhZmZpYyBhbmQgYWJpbGl0eSB0byBhdHRyYWN0IGluZXhwZXJpZW5jZWQgdmlzaXRvcnMuICYmJiZUaGUgdmFyaWFibGVzIG9mIGludGVyZXN0IGFyZSB0aGUgYW1vdW50IG9mIHJhbmdlcnMgaW52b2x2ZWQsIGFtb3VudCBvZiBwZW9wbGUgYmVpbmcgcmVzY3VlZCwgYWdlIGFuZCBnZW5kZXIgb2YgcmVzY3VlZCwgYW5kIHRoZSB0eXBlIG9mIGFjdGl2aXR5IHRoYXQgY2F1c2VkIHRoZSBhY2NpZGVudC4gV2Ugd2lsbCBiZSBhbmFseXppbmcgdGhlIHJlc2N1ZXMgaGFwcGVuaW5nIGluIHRoZSBBZGlyb25kYWNrIFBhcmsgdG8gdHJ5IHRvIGZpbmQgZ3JvdXBzIG9mIHBlb3BsZSB3aG8gYXJlIGF0IGEgZ3JlYXRlciByaXNrIG9mIG5lZWRpbmcgcmVzY3VlIGFuZCB3b3VsZCB0aGVyZWZvcmUgYmVuZWZpdCBtb3JlIGZyb20gdGFyZ2V0ZWQgYXdhcmVuZXNzIGNhbXBhaWducy4NCg0KLi4uDQoNCiMgQmFja2dyb3VuZA0KDQpUaGlzIGlzIG9ic2VydmF0aW9uYWwgZGF0YSBvcmlnaW5hbGx5IGZvdW5kIG9uIERhdGEgV29ybGQgKGh0dHBzOi8vZGF0YS53b3JsZC8pIGZyb20gdGhlIE5ZU0RFQyBvbiBmb3Jlc3QgcmFuZ2VyIGluY2lkZW50IHJlcG9ydHMuIEluIG9yZGVyIHRvIGhlbHAgdW5kZXJzdGFuZCB0aGUgZGF0YSBpdCB3b3VsZCBiZSBoZWxwZnVsIGZvciB0aGUgcmVhZGVyIHRvIGhhdmUgcHJldmlvdXMga25vd2xlZGdlIGFib3V0IHJlY3JlYXRpb25hbCBhY3Rpdml0aWVzIGluIE5ldyBZb3JrIFN0YXRlIGZvcmVzdHMgYW5kIHRoZSByaXNrcyBpbnZvbHZlZCB3aXRoIHRob3NlIGFjdGl2aXRpZXMuIA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHRpZHltb2RlbHMpDQpsaWJyYXJ5KGh0dHIpDQpsaWJyYXJ5KGpzb25saXRlKQ0KbGlicmFyeShzZikNCmxpYnJhcnkodG1hcCkNCmxpYnJhcnkgKHJlYWRyKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQp1cmxmaWxlPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vSmFCdWRrYS9TVEFUMzgzX0YyMS9Qcm9qZWN0L1NSX2RhdGEuY3N2Ig0KcmF3X3NyX2RhdGE8LXJlYWQuY3N2KHVybCh1cmxmaWxlKSkgJT4lDQogIGNsZWFuX25hbWVzKCkNCnJhd19hZGtfZGF0YSA8LSByYXdfc3JfZGF0YSAlPiUNCiAgZmlsdGVyKGluY2lkZW50X2FkaXJvbmRhY2tfcGFyayA9PSAidHJ1ZSIpDQpgYGANCi4uLg0KDQojIE1ldGhvZHMgYW5kIFJlc3VsdHMNCg0KVG8gaGVscCB1cyB2aXN1YWxpemUgdGhlIGxvY2F0aW9uIGZvdW5kIGRhdGEgd2UgY2FuIGxvb2sgYXQgYWxsIHRoZSBpbmNpZGVudHMgcGxvdHRlZCBvbiBhIG1hcCBvZiBOZXcgWW9yayBTdGF0ZSBhcyBzaG93biBpbiBzZWN0aW9uIDMuMS4gRnJvbSB2aXN1YWwgaW5zcGVjdGlvbiwgd2UgY2FuIHNlZSB0aGUgaGlnaGVzdCBkZW5zaXR5IG9mIHJlc2N1ZXMgb2NjdXIgaW4gdGhlIEFkaXJvbmRhY2tzLiBXZSBjYW4gdmVyaWZ5IHRoaXMgYnkgdXNpbmcgdGhlIHRhYmxlIGZ1bmN0aW9uIHRvIHN1bW1hcml6ZSB0aGUgcmVzdWx0cy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCmNvdW50X2FkayA8LSAgdGFibGUocmF3X3NyX2RhdGFbJ2luY2lkZW50X2FkaXJvbmRhY2tfcGFyayddKQ0KICByb3duYW1lcyhjb3VudF9hZGspID0gYygiT3V0c2lkZSBBREsiLCAiSW5zaWRlIEFESyIpDQpjb3VudF9hZGsNCmBgYA0KDQojIyBMb2NhdGlvbiBGb3VuZCBvZiBhbGwgSW5jaWRlbnRzDQpgYGB7ciAgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnJhd19zcl9tYXAgPC0gcmF3X3NyX2RhdGFbY29tcGxldGUuY2FzZXMocmF3X3NyX2RhdGEpLCBdICU+JQ0Kc3RfYXNfc2YoY29vcmRzID0gYygibG9jYXRpb25fZm91bmRfbG9uZ2l0dWRlIiwgImxvY2F0aW9uX2ZvdW5kX2xhdGl0dWRlIiksIGNycyA9IDQzMjYpDQp0bWFwX21vZGUoInZpZXciKQ0KdG1fc2hhcGUocmF3X3NyX21hcCkgKw0KICB0bV9kb3RzKHNpemU9MC4wMixjb2w9InJlZCIsIGFscGhhID0gMC41KSArIHRtX2xlZ2VuZChvdXRzaWRlID0gVFJVRSkgDQpgYGANCg0KLi4uDQoNCk9uZSBvZiB0aGUgdmFyaWFibGVzIHdlIGZvY3VzZWQgdGhlIG1vc3Qgb24gd2FzIHRoZSBhZ2Ugb2YgdGhlIHJlc2N1ZWQuIFNlY3Rpb24gMy4yIGRpc3BsYXlzIHRoZSBsb2NhdGlvbiBmb3VuZCBkYXRhIGFnYWluIGJ5IHN1YmplY3QgYWdlIGV4Y2VwdCB0aGlzIHRpbWUganVzdCBmb3IgaW5jaWRlbnRzIHRoYXQgc3RhcnRlZCBpbiB0aGUgQWRpcm9uZGFjayBwYXJrLiBUaGVyZSBhcmUgYSBmZXcgb3V0bGllcnMgd2hlcmUgcGVvcGxlIHdlcmUgZm91bmQgb3V0c2lkZSB0aGUgcGFyay4gVGhlc2UgYXJlIGxpa2VseSBkdWUgdG8gdGhlIHBlcnNvbiBiZWluZyByZXBvcnRlZCBtaXNzaW5nIGJ1dCB0aGVuIGJlaW5nIGZvdW5kIGF0IGhvbWUuIA0KDQojIyBMb2NhdGlvbiBGb3VuZCBpbiBBZGlyb25kYWNrcyBHcm91cGVkIGJ5IEFnZQ0KYGBge3IgIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQphZGtfZ2VvbV9kYXRhIDwtIHJhd19hZGtfZGF0YVtjb21wbGV0ZS5jYXNlcyhyYXdfYWRrX2RhdGEpLCBdICU+JQ0Kc3RfYXNfc2YoY29vcmRzID0gYygibG9jYXRpb25fZm91bmRfbG9uZ2l0dWRlIiwgImxvY2F0aW9uX2ZvdW5kX2xhdGl0dWRlIiksIGNycyA9IDQzMjYpIA0KdG1hcF9tb2RlKCJ2aWV3IikNCnRtX3NoYXBlKGFka19nZW9tX2RhdGEpICsNCiAgdG1fZG90cyhzaXplPTAuMDIsY29sPSJzdWJqZWN0X2FnZSIsIGFscGhhID0gMC43LCBwYWxldHRlID0gIlNwZWN0cmFsIikNCmBgYA0KDQpUaGUgZGF0YSBmcmFtZSBjYW4gYmUgb3ZlcndoZWxtaW5nIHRvIGxvb2sgYXQuIEl0IGlzIGVhc2llciB0byBkaWdlc3Qgd2hlbiBzdW1tYXJpemVkIHdpdGggdGhlICJ0YWJsZSIgZnVuY3Rpb24uIFdlIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBiZXR0ZXIgdmlzdWFsaXplIHRoZSB2YXJpYWJsZXMgb2YgaW50ZXJlc3QuIA0KDQpTb21lIGluaXRpYWwgb2JzZXJ2YXRpb25zIGFyZSB0aGF0IG1vcmUgbWVuIG5lZWQgYXNzaXN0YW5jZSB0aGFuIHdvbWVuLCB0aGVyZSB3ZXJlIG1vcmUgc2VhcmNoZXMgdGhhbiByZXNjdWVzLCByZWNvdmVyaWVzLCBvciBmdWdpdGl2ZSBzZWFyY2hlcyBjb21iaW5lZCwgYW5kIHRoZSBtb3N0IGNvbW1vbiBhY3Rpdml0eSB0byBuZWVkIGFzc2lzdGFuY2Ugd2FzIGhpa2luZywgZm9sbG93ZWQgbm90IHNvIGNsb3NlbHkgYnkgYm9hdGluZy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCmNvdW50X2dlbmRlciA8LSAgdGFibGUocmF3X2Fka19kYXRhWydzdWJqZWN0X2dlbmRlciddKQ0KY291bnRfZ2VuZGVyDQpjb3VudF9ydHlwZSA8LSB0YWJsZShyYXdfYWRrX2RhdGFbJ3Jlc3BvbnNlX3R5cGUnXSkNCmNvdW50X3J0eXBlDQpjb3VudF9hY3Rpdml0eSA8LSB0YWJsZShyYXdfYWRrX2RhdGFbJ2FjdGl2aXR5J10pDQpjb3VudF9hY3Rpdml0eQ0KDQpgYGANCg0KDQoNClRoZXJlIHNlZW1zIHRvIGJlIGEgY29ycmVsYXRpb24gYmV0d2VlbiB0aGUgc3ViamVjdCdzIGFnZSBhbmQgd2hhdCB0eXBlIG9mIHJlc3BvbnNlIGlzIHR5cGljYWxseSBuZWVkZWQuICBJdCBjYW4gYmUgY29uY2x1ZGVkIHRoYXQgYXMgcGVvcGxlIGdldCBvbGRlciwgdGhleSBtYXkgYmVjb21lIG1vcmUgZmFtaWxpYXIgd2l0aCB0aGUgbGFuZCwgb3Igc2ltcGx5IGJlIG1vcmUgY2FyZWZ1bCB3aXRoIHRoZWlyIGFjdGl2aXRpZXMuICBTZWFyY2ggYW5kIFJlc2N1ZSByZXNwb25zZXMgYXJlIHRoZSBvbmx5IHR5cGUgdGhhdCBvY2N1ciBmb3IgcGVvcGxlIDMwIGFuZCB1bmRlciwgcHJvdmluZyB0aGF0IHRoZSB5b3VuZ2VyIHBlb3BsZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBtb3JlIHRyYWluaW5nIG9uIGNlcnRhaW4gc2tpbGxzIGJlZm9yZSB0cmF2ZWxpbmcgaW50byB0aGUgbW91bnRhaW5zIGFsb25lLiAgQWx0aG91Z2gsIHRoZSBtZWFuIGlzIGFyb3VuZCAzNSB0byA0MCB5ZWFycyBvbGQsIG1lYW5pbmcgdGhhdCBtb3N0bHkgcGVvcGxlIG92ZXIgMzAgYXJlIG1vcmUgY29tbW9uIGluIGdlbmVyYWwgaW4gdGhlIGFyZWEsIGFuZCB0aGVyZWZvcmUgbmVlZGluZyB0aGUgaGVscCBqdXN0IGFzIG11Y2guICBPdmVyYWxsIGFsbCBwZW9wbGUgdHJhdmVyc2luZyBpbnRvIHRoZSBtb3VudGFpbnMgc2hvdWxkIGhhdmUgYmV0dGVyIHNhZmV0eSBhd2FyZW5lc3MgYmVmb3JlIGdvaW5nIG91dCBhbG9uZSwgaW4gY2FzZSBhbnkgcHJvYmxlbXMgb2NjdXIuDQpBbm90aGVyIGltcG9ydGFudCBwb2ludCB0byBtYWtlIGFib3V0IHRoaXMgZGF0YSBpcyB0aGUgbm90aWNlYWJsZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIG9sZGVyIHBlb3BsZSBhbmQgcmVjb3ZlcnkuICBBcyB3ZSBhbGwga25vdywgYXMgd2UgYWdlIG91ciBib2RpZXMgYXJlIG5vdCBhcyBjYXBhYmxlIGFzIHRoZXkgdXNlZCB0byBiZSwgbWVhbmluZyB0aGV5IGFyZSBtb3JlIGxpa2VseSB0byBiZSBpbmp1cmVkLCBjYXVzaW5nIGEgbmVlZCB0byBiZSByZXNjdWVkLiAgT25lIHdheSB0byBkZWNyZWFzZSB0aGUgbmVlZCBmb3IgcmVzY3VlcyBjb3VsZCBiZSBleHRyYSB0cmFpbmluZyBhYm91dCBzYWZldHkgcHJlY2F1dGlvbnMgYW5kIGdpdmUgZmFpciB3YXJuaW5ncyBhYm91dCBjZXJ0YWluIGFjdGl2aXRpZXMuICBGb3IgZXhhbXBsZSBpZiBhIGhpa2UgaGFzIG9uZSBhcmVhIHRoYXQgZ2V0cyBzbGlwcGVyeSBiZWZvcmUgdGhlIHJlc3QsIHB1dCB1cCBtb3JlIHNpZ25zIG9yIG1ha2Ugc3VyZSBpdCBpcyBtZW50aW9uZWQgYmVmb3JlIGFueW9uZSBldmVuIGJlZ2lucyB0aGUgZXhjdXJzaW9uLg0KYGBge3IgZWNobz1GQUxTRX0NCnJhd19hZGtfZGF0YSAlPiUgDQogIGdncGxvdChhZXMoeSA9IHN1YmplY3RfYWdlLCB4ID0gcmVzcG9uc2VfdHlwZSkpICsNCiAgZ2VvbV9ib3hwbG90KCkrDQogIGdndGl0bGUoIlN1YmplY3QgQWdlIHZzIFJlc3BvbnNlIFR5cGUiKSANCmBgYA0KDQoNCmBgYHtyIGVjaG89RkFMU0V9DQpzZWFyY2hfZGF0YSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihyZXNwb25zZV90eXBlPT0iU2VhcmNoIikNCnJlc2N1ZV9kYXRhIDwtIHJhd19hZGtfZGF0YSAlPiUNCiAgZmlsdGVyKHJlc3BvbnNlX3R5cGU9PSJSZXNjdWUiKQ0KcmVjb3ZlcnlfZGF0YSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihyZXNwb25zZV90eXBlPT0iUmVjb3ZlcnkiKQ0KTUFyZWNvdmVyeSA8LSBtZWFuKHJlY292ZXJ5X2RhdGEkc3ViamVjdF9hZ2UsIG5hLnJtID0gIlRSVUUiKQ0KTUFyZXNjdWUgPC0gbWVhbihyZXNjdWVfZGF0YSRzdWJqZWN0X2FnZSwgbmEucm0gPSAiVFJVRSIpDQpNQXNlYXJjaCA8LSBtZWFuKHNlYXJjaF9kYXRhJHN1YmplY3RfYWdlLCBuYS5ybSA9ICJUUlVFIikNCmNhdCgnTWVhbiBhZ2VzDQpSZWNvdmVyeT0gJyxNQXJlY292ZXJ5KQ0KY2F0KCcNClJlc2N1ZT0gJyxNQXJlc2N1ZSkNCmNhdCgnDQpTZWFyY2g9ICcsTUFzZWFyY2gpDQpgYGANCg0KYGBge3J9DQptZWFuKHkkaW5jaWRlbnRfdGltZV9lbGFwc2VkKQ0KDQpzZWFyY2ggPC0geSAlPiUNCiAgZmlsdGVyKHJlc3BvbnNlX3R5cGU9PSJTZWFyY2giKQ0KcmVzY3VlIDwtIHkgJT4lDQogIGZpbHRlcihyZXNwb25zZV90eXBlPT0iUmVzY3VlIikNCnJlY292ZXJ5IDwtIHkgJT4lDQogIGZpbHRlcihyZXNwb25zZV90eXBlPT0iUmVjb3ZlcnkiKQ0KDQpyZXYgPC0gbWVhbihzZWFyY2gkaW5jaWRlbnRfdGltZV9lbGFwc2VkLCBuYS5ybSA9ICJUUlVFIikNCnJlcyA8LSBtZWFuKHJlc2N1ZSRpbmNpZGVudF90aW1lX2VsYXBzZWQsIG5hLnJtID0gIlRSVUUiKQ0Kc2VhIDwtIG1lYW4ocmVjb3ZlcnkkaW5jaWRlbnRfdGltZV9lbGFwc2VkLCBuYS5ybSA9ICJUUlVFIikNCmNhdCgnTWVhbiBpbmNpZGVudCB0aW1lIGVsYXBzZWQNClJlY292ZXJ5PSAnLHJldikNCmNhdCgnDQpSZXNjdWU9ICcscmVzKQ0KY2F0KCcNClNlYXJjaD0gJyxzZWEpDQpgYGANCg0KDQpQZXJmb3JtIGF0IGxlYXN0IG9uZSByZWxldmFudCBoeXBvdGhlc2lzIHRlc3QuIA0KDQoNClR3byBoeXBvdGhlc2lzIHRlc3RzIHdlcmUgcGVyZm9ybWVkDQoNClRoZSBmaXJzdCBoeXBvdGhlc2lzIHRlc3Qgd2FzIGEgdHdvLXRhaWxlZCB0ZXN0IHRvIGZpbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBiZXR3ZWVuIGFtb3VudCBvZiBtYWxlcyBhbmQgZmVtYWxlcy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCmZlbWFsZSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihzdWJqZWN0X2dlbmRlciA9PSAiRiIpDQoNCm1hbGUgPC0gcmF3X2Fka19kYXRhICU+JQ0KICBmaWx0ZXIoc3ViamVjdF9nZW5kZXIgPT0gIk0iKQ0KDQpoMSA8LSB0LnRlc3QoZmVtYWxlJHN1YmplY3RfYWdlLCBtYWxlJHN1YmplY3RfYWdlLCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCB2YXIuZXF1YWwgPSBGQUxTRSkNCmgxDQpgYGANCg0KVGhlIHNlY29uZCBoeXBvdGhlc2lzIHRlc3QgcGVyZm9ybWVkIHdhcyBhIHNpbmdsZS10YWlsZWQgaHlwb3RoZXNpcyB0byBzZWUgaWYgdGhlIGFnZXMgYmV0d2VlbiByZXNjdWVkIG1hbGVzIGFuZCBmZW1hbGVzIGRpZmZlci4gIA0KVGhlIG51bGwgaHlwb3RoZXNpcyBpcyBtdV9mIC0gbXVfbSA9IDANClRoZSBhbHRlcm5hdGl2ZSBoeXBvdGhlc2lzIGlzIG11X2YgLSBtdV9tIDwgMA0KVGhlIHQtdGVzdCBpcyBwZXJmb3JtZWQgdG8gZmluZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gc2FtcGxlcy4NCkFmdGVyIHRoZSB0LXRlc3QgaXMgcnVuLCB0aGUgdmFsdWUgaXMgLTMuMTc2LCBtZWFuaW5nIHdlIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzIGJlY2F1c2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtYWxlcyBhbmQgZmVtYWxlcyBpcyBub3QgMC4NCg0KYGBge3IgZWNobz1GQUxTRX0NCg0KZmVtYWxlIDwtIHJhd19hZGtfZGF0YSAlPiUNCiAgZmlsdGVyKHN1YmplY3RfZ2VuZGVyID09ICJGIikNCg0KbWFsZSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihzdWJqZWN0X2dlbmRlciA9PSAiTSIpDQoNCmgyIDwtIHQudGVzdChmZW1hbGUkc3ViamVjdF9hZ2UsIG1hbGUkc3ViamVjdF9hZ2UsIGFsdGVybmF0aXZlID0gImxlc3MiLCB2YXIuZXF1YWwgPSBGQUxTRSkNCmgyDQoNCmBgYA0KDQpgYGB7cn0NCiMgRG9lcyB0aGUgbWVhbiBjYXNlIHRpbWUgZGlmZmVyIGJldHdlZW4gc2VhcmNoIGFuZCByZXNjdWU/DQp0LnRlc3Qoc2VhcmNoJGluY2lkZW50X3RpbWVfZWxhcHNlZCxyZXNjdWUkaW5jaWRlbnRfdGltZV9lbGFwc2VkLGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsY29uZi5sZXZlbCA9IC45OCkNCg0KIyBEb2VzIHRoZSBtZWFuIGNhc2UgdGltZSBkaWZmZXIgYmV0d2VlbiByZWNvdmVyeSBhbmQgc2VhcmNoPw0KdC50ZXN0KHJlY292ZXJ5JGluY2lkZW50X3RpbWVfZWxhcHNlZCxzZWFyY2gkaW5jaWRlbnRfdGltZV9lbGFwc2VkLGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsY29uZi5sZXZlbCA9IC45OCkNCg0KYGBgDQpgYGB7cn0NCmluY2lkZW50X21vZGVsIDwtIGxtKGluY2lkZW50X3RpbWVfZWxhcHNlZH5udW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCwgZGF0YSA9IHkpDQppbmNpZGVudF9tb2RlbA0KIyBpbnRlcmNlcHQgMTIwNi41DQojIHNsb3BlIDYyNC4yIA0KIyB0aGlzIG1lYW5zIHByZWRpY3RlZCB0aW1lID0gNjI0LjIgKiByYW5nZXJzIGludm9sdmVkDQpgYGANCg0KYGBge3J9DQoNCiN5ICU+JSBnZ3Bsb3QoYWVzKHggPSBudW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCwgeSA9IGluY2lkZW50X3RpbWVfZWxhcHNlZCkpICsNCiMgIGdlb21fcG9pbnQoKSArDQojICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSAzLjI1N2UrMDAsIHNsb3BlID0gOC4xOTVlLTA2ICkNCiNpbmNpZGVudF9tb2RlbCRyZXNpZHVhbHMNCnN1bShpbmNpZGVudF9tb2RlbCRyZXNpZHVhbHNeMikNCnN1bW1hcnkoaW5jaWRlbnRfbW9kZWwpDQoNCiMgQmVjYXVzZSBwIGlzIGxlc3MgdGhhbiBhbHBoYSwgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMuIFdlIGhhdmUgcmVhc29uIHRvIGJlbGlldmUgdGhhdCB0aGVyZSBpcyBhIGxpbmVhciByZWxhdGlvbnNoaXAgYmV0d2VlbiBpbmNpZGVudCB0aW1lIGVsYXBzZWQgYW5kIG51bWJlciBvZiByYW5nZXJzIGludm9sdmVkDQpgYGANCg0KDQoNCkNoZWNrIHRoZSB2YXJpb3VzIGFzc3VtcHRpb25zIG9mIGZvciBzdGF0aXN0aWNhbCB0ZXN0cy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCm1vZGVsID0gbG0obnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQgfiBzdWJqZWN0X2FnZSwgZGF0YSA9IHJhd19hZGtfZGF0YSkNCnN1bW1hcnkobW9kZWwpDQpwbG90KG1vZGVsKQ0KYGBgDQoNCmBgYHtyfQ0KDQojIHByZWRpY3QgdGhlIHRpbWUgdG8gY2xvc2UgYSBjYXNlIHdpdGggMyByYW5nZXJzDQpwcmVkaWN0KGluY2lkZW50X21vZGVsLCBuZXdkYXRhID0gZGF0YS5mcmFtZShudW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCA9IDMpKQ0KDQojIGNvcnJlbGF0aW9uIGJldHdlZW4gdGltZSBlbGFwc2VkIGFuZCBudW1iZXIgb2YgcmFuZ2VycyBmb3IgYWxsIHR5cGVzIG9mIGluY2lkZW50cw0KeSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gaW5jaWRlbnRfdGltZV9lbGFwc2VkLCB5ID0gbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQsIGNvbG9yID0gcmVzcG9uc2VfdHlwZSkpICsNCiAgZ2VvbV9wb2ludChzaXplID0gMC4xKSArDQogIGZhY2V0X3dyYXAodmFycyhyZXNwb25zZV90eXBlKSkNCg0KIyBsb29raW5nIGF0IGNvcnJlbGF0aW9uIGZvciBlYWNoIHJlc3BvbnNlIHR5cGUNCiMgdGhlcmUgaXMgYSBoaWdoIGNvcnJlbGF0aW9uIGJldHdlZW4gdGltZSBlbGFwc2VkIGFuZCBudW1iZXIgb2YgcmFuZ2VycyBpbnZvbHZlZCBmb3IgZnVnaXRpdmUgc2VhcmNoDQojIHRoZSBvdGhlciBvbmVzIGRvbnQgc2hvdyBhIGhpZ2ggY29ycmVsYXRpb24gYnV0IHRoaXMgaXMga2luZGEgZXhwZWN0ZWQgYmVjYXVzZSB0aGVyZSBhcmUgbG90cyBvZiBvdXRsaWVycw0KeSAlPiUNCiAgZ3JvdXBfYnkocmVzcG9uc2VfdHlwZSkgJT4lDQogIHN1bW1hcml6ZShyID0gY29yKGluY2lkZW50X3RpbWVfZWxhcHNlZCwgbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKSkNCg0KDQojIGluY2lkZW50IG1vZGVsIHFxIHBsb3QNCnBsb3QoaW5jaWRlbnRfbW9kZWwpDQoNCmBgYA0KDQoNCg0KDQoNCkZvciB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gYW5hbHlzaXMsIGludGVycHJldCBjb2VmZmljaWVudHMgYW5kL29yIG1ha2UgcmVsZXZhbnQgcHJlZGljdGlvbnMgYW5kDQpzdW1tYXJpemUgdGhlaXIgbWVhbmluZy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCnJhd19hZGtfZGF0YSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHN1YmplY3RfYWdlLCB5ID0gbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQpKSsNCiAgZ2VvbV9wb2ludCgpKw0KICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSAzLjE0MjUzNSwgc2xvcGUgPSAwLjAwNDYyNywgY29sPSJtYWdlbnRhIikrDQogIGdndGl0bGUoIlJhbmdlcnMgdG8gQWdlIFJlZ3Jlc3Npb24iKSANCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KY29yKHJhd19hZGtfZGF0YSRzdWJqZWN0X2FnZSxyYXdfYWRrX2RhdGEkbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0V9DQp4IDwtIGxtKGZvcm11bGEgPSBudW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCB+IHN1YmplY3RfYWdlLGRhdGE9cmF3X2Fka19kYXRhKQ0Kc3VtbWFyeSh4KQ0KYGBgDQoNCmBgYHtyfQ0KDQpyYXdfYWRrX2RhdGEgJT4lDQogIGdyb3VwX2J5KHJlc3BvbnNlX3R5cGUpICU+JQ0KICBzdW1tYXJpemUociA9IGNvcih4ID0gc3ViamVjdF9hZ2UsIHkgPSBudW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCwgdXNlID0gImNvbXBsZXRlLm9icyIpKQ0KYGBgDQoNCmBgYHtyfQ0KY29yKHJhd19hZGtfZGF0YSRzdWJqZWN0X2FnZSxyYXdfYWRrX2RhdGEkbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQ0KYGBgDQoNCi4uLg0KDQoNCiMgQ29uY2x1c2lvbnMNCi4uLg0KDQoNCiMgUmVmZXJlbmNlcyB7LX0NCg0KRGF0YS53b3JsZA0KaHR0cHM6Ly9kYXRhLndvcmxkL2RhdGEtbnktZ292L3U2aHUtaDdwNQ0K